package com.apexsoft.monitor.utils;

import java.util.LinkedHashMap;
import java.util.Map;

public class LRUCache<K, V> extends LinkedHashMap<K, V> {

    /**
	 * 
	 */
	private static final long serialVersionUID = -4659531848621615459L;


    /** 存储数据容量  */
    private int               capacity;

    /**
     * 默认构造方法
     */
    public LRUCache() {
        super();
    }

    /**
     * 带参数构造方法
     * @param initialCapacity   容量
     * @param loadFactor        装载因子
     * @param isLRU             是否使用lru算法，true：使用（按方案顺序排序）;false：不使用（按存储顺序排序）
     */
    public LRUCache(int initialCapacity) {
        super(initialCapacity, 0.75f, true);
        capacity = initialCapacity;
    }

    /**
     * 带参数构造方法
     * @param initialCapacity   容量
     * @param loadFactor        装载因子
     * @param isLRU             是否使用lru算法，true：使用（按方案顺序排序）;false：不使用（按存储顺序排序）
     * @param lruCapacity       lru存储数据容量       
     */
    public LRUCache(int initialCapacity, float loadFactor, boolean isLRU, int lruCapacity) {
        super(initialCapacity, loadFactor, true);
        this.capacity = lruCapacity;
    }

    /** 
     * @see LinkedHashMap#removeEldestEntry(Map.Entry)
     */
    protected boolean removeEldestEntry(Map.Entry<K,V> eldest) {
        if(size() > capacity) {
            return true;
        }
        return false;
    }
}
